﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using DTO;
using BUS;

namespace Cafe_htc
{
    public partial class PhanQuyen : Form
    {
        public PhanQuyen()
        {
            InitializeComponent();
        }

        private void HienThiDanhSachTaiKhoan()
        {
            dgvTaiKhoan.Rows.Clear();

            List<TaiKhoanDTO> dsTK = TaiKhoanBUS.LayDanhSachTaiKhoan();
            int count = dsTK.Count;
            for (int i = 0; i < count; ++i)
            {
                dgvTaiKhoan.Rows.Add(dsTK[i].Username, dsTK[i].LoaiTaiKhoan);
            }
        }

        private void PhanQuyen_Load(object sender, EventArgs e)
        {
            // check radiobutton Xóa TK...
            rbtnXoaTK.Checked = true;
            rbtnXoaTK_CheckedChanged(sender, e);

            // Hiển thị danh sách tài khoản vào bảng...  
            HienThiDanhSachTaiKhoan();
        }

        private void dgvTaiKhoan_SelectionChanged(object sender, EventArgs e)
        {
            if (rbtnThemTK.Checked == false)
            {
                TaiKhoanDTO taikhoan = TaiKhoanBUS.LayThongTinTaiKhoan(dgvTaiKhoan.CurrentRow.Cells[0].Value.ToString());
                if (taikhoan != null)
                {
                    tbxUsername.Text = taikhoan.Username;
                    tbxPassword.Text = taikhoan.Password;
                    tbxHoTen.Text = taikhoan.HoTen;
                    cbxLoaiTaiKhoan.Text = taikhoan.LoaiTaiKhoan;
                }
            }
        }

        private void rbtnThemTK_CheckedChanged(object sender, EventArgs e)
        {
            // Cho phép người dùng nhập thông tin tải khoản...
            tbxUsername.ReadOnly = false;
            tbxPassword.ReadOnly = false;
            tbxHoTen.ReadOnly = false;
            cbxLoaiTaiKhoan.Enabled = true;

            tbxUsername.Text = "";
            tbxPassword.Text = "";
            tbxHoTen.Text = "";

            // Hướng dẫn:
            tbxHuongDan.Text = "* Bước 1: Nhập đầy đủ thông tin tài khoản vào bảng Thông Tin Tài Khoản." + "\r\n\r\n" + "* Bước 2: Bấm nút Chấp Nhận để thêm tài khoản này vào Danh Sách Tài Khoản.";

            // Hiển thị button Help...
            btnHelp.Visible = true;
        }

        private void rbtnXoaTK_CheckedChanged(object sender, EventArgs e)
        {
            // Chỉ cho người dùng xem thông tin, không cho người dùng chỉnh sửa...
            tbxUsername.ReadOnly = true;
            tbxPassword.ReadOnly = true;
            tbxHoTen.ReadOnly = true;
            cbxLoaiTaiKhoan.Enabled = false;

            tbxUsername.Text = "";
            tbxPassword.Text = "";
            tbxHoTen.Text = "";

            // Hướng dẫn:
            tbxHuongDan.Text = "* Bước 1: Chọn tài khoản mà bạn muốn xóa ở bảng Danh Sách Tài Khoản. Thông tin của tài khoản này sẽ được hiển thị ở bảng Thông Tin Tài Khoản." + "\r\n\r\n" + "* Bước 2: Bấm nút Chấp Nhận để xóa.";

            // Ẩn button Help...
            btnHelp.Visible = false;
        }

        private void rbtnCapNhat_CheckedChanged(object sender, EventArgs e)
        {
            // Cho phép người dùng chỉnh sửa thông tin tài khoản...
            tbxUsername.ReadOnly = false;
            tbxPassword.ReadOnly = false;
            tbxHoTen.ReadOnly = false;
            cbxLoaiTaiKhoan.Enabled = true;

            tbxUsername.Text = "";
            tbxPassword.Text = "";
            tbxHoTen.Text = "";

            // Hướng dẫn:
            tbxHuongDan.Text = "* Bước 1: Chọn tài khoản mà bạn muốn cập nhật lại ở bảng Danh Sách Tài Khoản. Thông tin của tài khoản này sẽ được hiển thị ở bảng Thông Tin Tài Khoản." + "\r\n\r\n" + "* Bước 2: Sau khi chỉnh sửa xong thông tin, bạn bấm nút Chấp Nhận để cập nhật lại.";

            // Ẩn button Help...
            btnHelp.Visible = false;
        }

        private void btnChapNhan_Click(object sender, EventArgs e)
        {
            int i = 0;
            int index = 0;

            string strtemp = tbxUsername.Text.ToString();
            if (strtemp == "")
            {
                MessageBox.Show("Username không được để trống...", "Lỗi!...", MessageBoxButtons.OK, MessageBoxIcon.Error);
            }
            else
            {
                int lentemp = strtemp.Length;
                do
                {
                    int a = (int)strtemp[i];
                    if (a < 48 || (a > 57 && a < 65) || (a > 90 && a < 97) || a > 122)
                        index = 1;

                    ++i;
                }
                while (index == 0 && i < lentemp);

                if (i < lentemp || lentemp > 30 || lentemp < 3)
                {
                    MessageBox.Show("Username chỉ gồm từ 3-30 ký tự, chứa các ký tự từ a-z, A-Z, 0-9.", "Lỗi!...", MessageBoxButtons.OK, MessageBoxIcon.Error);

                    tbxUsername.Text = "";
                }
                else
                {
                    i = 0;
                    index = 0;

                    strtemp = tbxPassword.Text.ToString();
                    if (strtemp == "")
                    {
                        MessageBox.Show("Password không được để trống...", "Lỗi!...", MessageBoxButtons.OK, MessageBoxIcon.Error);
                    }
                    else
                    {
                        lentemp = strtemp.Length;
                        do
                        {
                            int a = (int)strtemp[i];
                            if (a < 48 || (a > 57 && a < 65) || (a > 90 && a < 97) || a > 122)
                                index = 1;

                            ++i;
                        }
                        while (index == 0 && i < lentemp);

                        if (i < lentemp || lentemp > 30 || lentemp < 3)
                        {
                            MessageBox.Show("Password chỉ gồm từ 3-30 ký tự, chứa các ký tự từ a-z, A-Z, 0-9.", "Lỗi!...", MessageBoxButtons.OK, MessageBoxIcon.Error);

                            tbxPassword.Text = "";
                        }
                        else
                        {
                            i = 0;
                            index = 0;
                            strtemp = tbxHoTen.Text.ToString();
                            if (strtemp == "")
                            {
                                MessageBox.Show("Họ tên không được để trống...", "Lỗi!...", MessageBoxButtons.OK, MessageBoxIcon.Error);
                            }
                            else
                            {
                                lentemp = strtemp.Length;
                                if (lentemp > 100 || lentemp < 3)
                                {
                                    MessageBox.Show("Họ tên chỉ gồm từ 3-100 ký tự.", "Lỗi!...", MessageBoxButtons.OK, MessageBoxIcon.Error);

                                    tbxHoTen.Text = "";
                                }
                                else
                                {

                                    if (rbtnThemTK.Checked == true)
                                    {
                                        // Khi radiobutton Thêm TK được chọn...
                                        TaiKhoanDTO taikhoan = new TaiKhoanDTO();
                                        taikhoan.Username = tbxUsername.Text.Trim();
                                        taikhoan.Password = tbxPassword.Text.Trim();
                                        taikhoan.HoTen = tbxHoTen.Text.Trim();
                                        taikhoan.LoaiTaiKhoan = cbxLoaiTaiKhoan.Text.Trim();

                                        if (TaiKhoanBUS.ThemTaiKhoan(taikhoan))
                                        {
                                            MessageBox.Show("Đã thêm thành công...^_^", "Thông Báo!...", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                            // Cập nhật lại danh sách tài khoản trong bảng Danh Sách Tài Khoản...
                                            HienThiDanhSachTaiKhoan();

                                            tbxUsername.Text = "";
                                            tbxPassword.Text = "";
                                            tbxHoTen.Text = "";
                                        }
                                        else
                                            MessageBox.Show("Thêm không thành công...>.<", "Lỗi!...", MessageBoxButtons.OK, MessageBoxIcon.Error);

                                    }
                                    else
                                    {
                                        if (rbtnXoaTK.Checked == true)
                                        {
                                            // Khi radiobutton Xóa TK được chọn...
                                            if (MessageBox.Show("Bạn có chắc chắn muốm xóa hay không?...", "Thông báo!...", MessageBoxButtons.YesNo, MessageBoxIcon.Question) == DialogResult.Yes)
                                            {
                                                if (TaiKhoanBUS.XoaTaiKhoan(tbxUsername.Text.Trim()))
                                                {
                                                    MessageBox.Show("Đã xóa thành công...^_^", "Thông Báo!...", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                                    // Cập nhật lại danh sách tài khoản trong bảng Danh Sách Tài Khoản...
                                                    HienThiDanhSachTaiKhoan();

                                                    tbxUsername.Text = "";
                                                    tbxPassword.Text = "";
                                                    tbxHoTen.Text = "";
                                                }
                                                else
                                                    MessageBox.Show("Xóa không thành công...>.<", "Lỗi!...", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                            }
                                        }
                                        else
                                        {
                                            // Khi radiobutton Cập Nhật được chọn...
                                            TaiKhoanDTO taikhoan = TaiKhoanBUS.LayThongTinTaiKhoan(dgvTaiKhoan.CurrentRow.Cells[0].Value.ToString());
                                            taikhoan.Username = tbxUsername.Text.Trim();
                                            taikhoan.Password = tbxPassword.Text.Trim();
                                            taikhoan.HoTen = tbxHoTen.Text.Trim();
                                            taikhoan.LoaiTaiKhoan = cbxLoaiTaiKhoan.Text.Trim();

                                            if (TaiKhoanBUS.SuaThongTinTaiKhoan(taikhoan))
                                            {
                                                MessageBox.Show("Đã cập nhật thành công...^_^", "Thông Báo!...", MessageBoxButtons.OK, MessageBoxIcon.Information);

                                                // Cập nhật lại danh sách tài khoản trong bảng Danh Sách Tài Khoản...
                                                HienThiDanhSachTaiKhoan();

                                                tbxUsername.Text = "";
                                                tbxPassword.Text = "";
                                                tbxHoTen.Text = "";
                                            }
                                            else
                                                MessageBox.Show("Cập nhật không thành công...>.<", "Lỗi!...", MessageBoxButtons.OK, MessageBoxIcon.Error);
                                        }
                                    }
                                }
                            }
                        }
                    }
                }
            
            }
        }

        private void btnHelp_Click(object sender, EventArgs e)
        {
            tbxHuongDan.Text = "* Username và Password chỉ gồm từ 3-30 ký tự, chứa các ký tự từ a-z, A-Z, 0-9." + "\r\n\r\n" + "* Họ tên: Họ tên của chủ tài khoản, chỉ gồm từ 3-100 ký tự." + "\r\n\r\n" + "* Loại tài khoản: chọn loại tài khoản là 'User' hay 'Admin'";
        }

        private void btnXong_Click(object sender, EventArgs e)
        {
            this.Close();
        }
    }
}
